/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.compras;

import com.mindbox.mueblesalpes.negocio.entity.CategoriaValor;
import com.mindbox.mueblesalpes.negocio.entity.Cliente;
import com.mindbox.mueblesalpes.negocio.entity.Compra;
import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import com.mindbox.mueblesalpes.negocio.entity.Usuario;
import com.mindbox.mueblesalpes.negocio.entity.Venta;
import com.mindbox.mueblesalpes.negocio.exception.MontoTarjetaInsuficiente;
import com.mindbox.mueblesalpes.negocio.exception.NoSePudoGrabarTarjetaCredito;
import com.mindbox.mueblesalpes.negocio.exception.TarjetaCreditoNoExiste;
import java.util.List;
import javax.ejb.Local;

/**
 * Intefaz para el EJB del carrito de compras.
 * @author jsanchez
 */
@Local
public interface CarritoComprasLocal {

    /**
     * Obtiene el mueble seleccionado.
     * @return Mueble
     */
    public Mueble getMuebleSeleccionado();

    /**
     * Coloca el mueble seleccionado.
     * @param muebleSeleccionado
     */
    public void setMuebleSeleccionado(Mueble muebleSeleccionado);

    /**
     * Obtiene el carrito de compras
     * @return List<Compra>
     */
    public List<Compra> getCarritoCompras();

    /**
     * Coloca el carrito de compras.
     * @param carritoCompras
     */
    public void setCarritoCompras(List<Compra> carritoCompras);

    /**
     * Obtiene la venta actual.
     * @return Venta
     */
    public Venta getVenta();

    /**
     * Coloca la venta
     * @param venta
     */
    public void setVenta(Venta venta);

    /**
     * Obtiene las categorias valor que se están cobrando en la venta.
     * @return List<CategoriaValor>
     */
    public List<CategoriaValor> getCategoriasValor();

    /**
     * Coloca las categorías
     * @param categoriasValor
     */
    public void setCategoriasValor(List<CategoriaValor> categoriasValor);

    /**
     * Obtiene el subtotal de la compra.
     * @return double
     */
    public double getSubtotal();

    /**
     * Coloca el subtotal de la compra.
     * @param subtotal
     */
    public void setSubtotal(double subtotal);

    /**
     * Obtiene el valor total de la compra.
     * @return double
     */
    public double getValorTotal();

    /**
     * Coloca el valor total de la compra.
     * @param valorTotal
     */
    public void setValorTotal(double valorTotal);

    /**
     * Obtiene la descripción de la venta.
     * @return String
     */
    public String getDescripcionVenta();

    /**
     * Coloca la descripción de la venta.
     * @param descripcionVenta
     */
    public void setDescripcionVenta(String descripcionVenta);

    /**
     * Valida si se debe agregar un mueble; si está seleccionado.
     */
    public void validarAgregarMuebleSeleccionado();

    /**
     * Realiza la venta.
     * @param cliente
     * @param usuario
     */
    public void realizarVenta(Cliente cliente, Usuario usuario);

    /**
     * Realiza el pago de la compra.
     * @throws MontoTarjetaInsuficiente - la tarjeta no tiene fondos suficientes
     * @throws NoSePudoGrabarTarjetaCredito - error al grabar la actualizacion
     * @throws TarjetaCreditoNoExiste - tarjeta de credito no existe
     */
    public void realizarPago() throws TarjetaCreditoNoExiste, NoSePudoGrabarTarjetaCredito, MontoTarjetaInsuficiente;

    /**
     * Cancela el pago de la compra.
     */
    public void cancelarPago();

    /**
     * Termina la transacción.
     */
    public void terminarTransaccion();
}